package com.exit490.cfp.activities.transacao;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.Spinner;

import com.exit490.cfp.R;
import com.exit490.cfp.dao.CapitalDAO;
import com.exit490.cfp.dao.CategoriaDAO;
import com.exit490.cfp.dao.TransacaoDAO;
import com.exit490.cfp.modelo.Capital;
import com.exit490.cfp.modelo.Categoria;
import com.exit490.cfp.modelo.Transacao;

public class NovaTransacaoActivity extends ActionBarActivity {

    private List<Capital> listaCapital = new ArrayList<Capital>();
    private List<String> listaNomeCapital = new ArrayList<String>();
    private List<Categoria> listaCategoria = new ArrayList<Categoria>();
    private List<String> listaNomeCategoria = new ArrayList<String>();
    private CapitalDAO capitalDAO;
    private CategoriaDAO categoriaDAO;
    private TransacaoDAO transacaoDAO;
    private Transacao transacao;
    private Spinner spinnerCategoria, spinnerCapital;
    private EditText campoValorTransacao, campoDataTransacao;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_nova_transacao);
        populaComponentes();

    }

    public void cliqueAdicionarNovaTransacao(View view) {
        adicionaTransacao();
        finish();
    }

    public void cliqueCancelarNovaTransacao(View view) {
        finish();
    }

    private void populaComponentes() {
        populaListaCapital();
        poupulaListaCategoria();
        campoValorTransacao = (EditText) findViewById(R.id.campo_valor_transacao);
        campoDataTransacao = (EditText) findViewById(R.id.campo_data);
    }

    private void poupulaListaCategoria() {
        categoriaDAO = new CategoriaDAO(this);

        try {
            listaCategoria = categoriaDAO.listarTodasCategorias();
        } catch (Exception e) {
            e.printStackTrace();
        }

        for (Categoria categoria : listaCategoria) {
            listaNomeCategoria.add(categoria.getNomeCategoria());
        }

        spinnerCategoria = (Spinner) findViewById(R.id.campo_categoria);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, listaNomeCategoria);
        spinnerCategoria.setAdapter(adapter);
    }

    private void populaListaCapital() {
        capitalDAO = new CapitalDAO(this);

        try {
            listaCapital = capitalDAO.listarTodosCapitais();
        } catch (Exception e) {
            e.printStackTrace();
        }

        for (Capital capital : listaCapital) {
            listaNomeCapital.add(capital.getNomeDoCapital());
        }

        spinnerCapital = (Spinner) findViewById(R.id.campo_capital);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, listaNomeCapital);
        spinnerCapital.setAdapter(adapter);
    }

    private void adicionaTransacao() {
        transacaoDAO = new TransacaoDAO(this);
        transacao = new Transacao();

        String dataTransacao = campoDataTransacao.getText().toString();
        Double valorTransacao = Double.parseDouble(campoValorTransacao.getText().toString());
        transacao.setDataTransacao(dataTransacao);
        transacao.setValorTransacao(valorTransacao);
        transacao.setIdCapital(pegaIdCapital());
        transacao.setIdCategoria(pegaIdCategoria());
        transacao.setReceitaDespesa(1);
        transacao.setDataConcretizacao(dataTransacao);

        transacaoDAO.inserirTransacao(transacao);
    }

    private Long pegaIdCapital() {

        Long idCapital = null;
        long posicaoSpinnerCapital = spinnerCapital.getSelectedItemId();
        String nomeCapital = spinnerCapital.getItemAtPosition((int) posicaoSpinnerCapital).toString();

        Iterator<Capital> it = listaCapital.iterator();

        while (it.hasNext()) {
            Capital capital = it.next();

            if (capital.getNomeDoCapital().equals(nomeCapital)) {
                idCapital = capital.getIdCapital();
                break;
            }

        }

        return idCapital;

    }

    private Long pegaIdCategoria() {

        Long idCAtegoria = null;
        long posicaoSpinnerCategoria = spinnerCategoria.getSelectedItemId();
        String nomeCategoria = spinnerCategoria.getItemAtPosition((int) posicaoSpinnerCategoria).toString();

        Iterator<Categoria> it = listaCategoria.iterator();

        while (it.hasNext()) {
            Categoria capital = it.next();

            if (capital.getNomeCategoria().equals(nomeCategoria)) {
                idCAtegoria = capital.getIdCategoria();
                break;
            }

        }

        return idCAtegoria;

    }

}
